草庐IT

Android Proguard 不内联

全部标签

c++ - 为什么 libcxx 应用 __forceinline 或 GCC 等效于它已经隐藏的内联函数?

我想确切地理解为什么内联函数的libc++可见性宏使用__forceinline或__attribute__((__always_inline__))作为它关联的属性的一部分内联函数。背景见:ThelibcxxvisibilitydesigndocumentThedefinitionofINLINE_VISIBILITY如果这些内联函数无论如何都将被标记为__visibility__("hidden"),为什么还需要额外强制编译器将它们内联?我想了一下,我有一些假设,但似乎没有一个让我完全满意:这是为了确保符号不会意外成为ABI的一部分。如果在构建库时,编译器选择不内联函数,它可能会成

c++ - 内联汇编是 ANSI C 标准的一部分吗?

我一直以为是,但许多IDE和语法高亮工具不会在C中突出显示ASM,但它们总是在C++中突出显示。内联汇编是否属于C标准(ANSII或ISO)? 最佳答案 它不在ISOC标准(C2011的n1570草案)中,但在附件J(通用扩展)中提到:J.5.10Theasmkeyword1Theasmkeywordmaybeusedtoinsertassemblylanguagedirectlyintothetranslatoroutput(6.8).Themostcommonimplementationisviaastatementofthef

c++ - Visual C++ ~ 不内联简单的 const 函数指针调用

亲爱的StackOverflowers,我得到了一段在MicrosoftVisualStudioC++2012上编译的简单代码:intadd(intx,inty){returnx+y;}typedefint(*func_t)(int,int);classA{public:conststaticfunc_tFP;};constfunc_tA::FP=&add;intmain(){intx=3;inty=2;intz=A::FP(x,y);return0;}编译器生成如下代码:intmain(){000000013FBA2430subrsp,28hintx=3;inty=2;intz=A:

c++ - 为什么内联我的访问器会破坏我的代码?

我遇到了一个奇怪的问题,即尝试内联我的“Person”类的访问器导致代码无法编译。以下代码将编译并运行成功(使用VisualStudio2012):Person.h#pragmaonce#includeusingnamespacestd;classPerson{public:Person(stringname,intage=0);~Person(void);//Accessorsstringname(void)const;intage(void)const;private:stringm_name;intm_age;};Person.cpp#include"stdafx.h"#incl

c++ - 如何使用 Rcpp 和内联设置 g++ 编译器标志?

我想设置-std=c++0x,使用带内联的Rcpp。我看到了R:C++Optimizationflagwhenusingtheinlinepackage但不想在系统范围内进行更改,所以我在Dirk的回答中尝试了选项2。我试过:settings=getPlugin("Rcpp")settings$Makevars[length(settings$Makevars)+1]="CXXFLAGS=$(CXXFLAGS)-std=c++0x"fun=cxxfunction(signature(x_="numeric"),src,plugin="Rcpp",settings=settings,ve

C++ gcc 字符串内联

我想在运行时通过汇编指令强制将字符串动态分配到局部变量中,没有字符串占用数据部分中的内存(例如读取只有数据部分)。以下似乎完美地工作:charfoo[]="bar";汇编代码变为:movl$7496034,40(%esp)因此,foo在运行时通过movl指令用"bar"初始化。我怎样才能强制它发生在所有字符串操作上?例如,如果我将字符串文字传递给函数:testfunc("bar");在这种情况下,字符串"bar"将被分配到一个节中。 最佳答案 您展示的技术仅适用于您的特殊情况。通常,编译器可以随意将字符串的内容放入段中。例如,通过这

c++ - boost::spirit::气。如何将内联解析器表达式变成独立的语法,以及如何解包它们生成的元组?

我正在使用QI和Phoenix,我想编写一个小语法来返回4个bool值,这些bool值将用作语义操作中函数调用的参数。我有几个函数需要这些东西,到目前为止我已经使用了这种方法:(qi::_bool>>qi::_bool>>qi::_bool>>qi::_bool)[px::bind(&Bool4Function,spirit::_val,spirit::_1,spirit::_2,spirit::_3,spirit::_4)]虽然它本身没问题,但在所有地方使用它都非常丑陋和令人困惑,即使“使用”命名空间部分也是如此。这就是为什么我想将这个表达式提取到一个独立的语法中。所以我尝试了这个(

c++ - 虚函数可以内联吗

这个问题在这里已经有了答案:Areinlinevirtualfunctionsreallyanon-sense?(13个答案)inlinevirtualfunction(3个答案)关闭9年前。如果我这样定义一个类:classA{public:A(){}virtual~A(){}virtualvoidfunc(){}};是不是说虚析构函数和func是内联的

c++ - 静态内联方法?

好的,这是我正在尝试做的...现在正在编译但无法链接...LNK2001我希望这些方法是静态的,因为没有成员变量,但我也希望它们内联以提供加速。最好的方法是什么?简而言之,这是我所拥有的:/*foo.h*/classfoo{staticvoidbar(float*in);};/*foo.cpp*/inlinevoidfoo::bar(float*in){//somedarkmagichere}我正在尝试这样做,因为我希望能够:foo::bar(myFloatPtr);foo没有任何成员变量……这没有意义。 最佳答案 如果您从foo.

c++ - 递归函数的内联

当我尝试编译这段代码时:#include#include//Endrecursivetemplate-expansionoffunctionselectbelow.templatestaticinlineconstexprTypeselect(unsignedindex){returnType();}//Selectoneoftheitemspassedtoit.//e.g.select(0,a,b,c)=a;select(1,a,b,c)=b;etc.template[[gnu::always_inline]]staticinlineconstexprTypeselect(unsig